from pyecharts.charts import Bar, Timeline
import pyecharts.options as opts
from pyecharts.globals import ThemeType

# 获取数据
f = open('/Users/yanfeixingsan/Documents/进阶之路/python/test/可视化案例数据/动态柱状图数据/1960-2019全球GDP数据.csv',
         'r', encoding="GB2312")
line_data = f.readlines()  # 读取每一行
f.close()
line_data.pop(0)  # 删除第一行没用的数据

# 处理数据 最后存放到字典中
line_dict_data = {}
for line in line_data:
    year = line.split(',')[0]
    county = line.split(',')[1]
    gdp = float(line.split(',')[2])
    # 捕获异常查看字典中是否有 对应年份的key了
    try:
        line_dict_data[year].append([county, gdp])
    except KeyError:
        line_dict_data[year] = []
        line_dict_data[year].append([county, gdp])

timeline = Timeline({"theme": ThemeType.LIGHT})
# 取出每年gdp前八的国家
# 排序年份，防止顺序错乱
sorted_data_list = sorted(line_dict_data.keys())
for year in sorted_data_list:
    # 排序
    line_dict_data[year].sort(key= lambda element: element[1], reverse=True)
    # 切片
    year_data = line_dict_data[year][0:8]
    x_data = []
    y_data = []
    for year_gdp in year_data:
        x_data.append(year_gdp[0])
        y_data.append(year_gdp[1] / 100000000)

    # 创建 bar 柱状图
    bar = Bar()
    x_data.reverse()
    y_data.reverse()
    bar.add_xaxis(x_data)
    bar.add_yaxis('GDP(亿)', y_data, label_opts=opts.LabelOpts(position='right'))
    bar.reversal_axis()
    # 设置标题
    bar.set_global_opts(
        title_opts=opts.TitleOpts(title=f"{year}GDP")
    )
    timeline.add(bar, str(year))

# 设置自动播放
timeline.add_schema(
    play_interval=1000,         # 自动播放的间隔时间，单位毫秒
    is_timeline_show=True,      # 是否在自动播放的时候，显示时间轴
    is_auto_play=True,          # 是否自动播放
    is_loop_play=False          # 是否循环播放
)

# 绘图
timeline.render('1960-2019全球GDP前八国家排行.html')
